using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace RC.ControlAcceso.BaseDatos
{
    public class CAHorarioTurnoBD : TablaBase
    {
        #region Variables
        private int mIdHorarioTurno;
        private int mIdTurno;
        private CATurnoBD mTurnoBD;
        private DateTime mHoraEntrada;
        private DateTime mHoraSalida;
        private DateTime mTolerancia;
        private int mOrden;
        private bool mEsFranco;
        private bool mEsSabado;
        private int mDiasRotacion;
        private DateTime _horaSalidaIntermedia;
        private DateTime _horaEntradaIntermedia;
        private int _minutosDeAlmuerzo;
        #endregion

        #region Propiedades
        public int IdHorarioTurno
        {
            get { return mIdHorarioTurno; }
            set { mIdHorarioTurno = value; }
        }

        public int IdTurno
        {
            get { return mIdTurno; }
            set { mIdTurno = value; }
        }

        public CATurnoBD Turno
        {
            get
            {
                if (mTurnoBD == null)
                    mTurnoBD = new CATurnoBD(mIdTurno);

                return mTurnoBD;
            }
            set { mTurnoBD = value; }
        }

        public DateTime HoraEntrada
        {
            get { return mHoraEntrada; }
            set { mHoraEntrada = value; }
        }

        public DateTime HoraSalida
        {
            get { return mHoraSalida; }
            set { mHoraSalida = value; }
        }

        public DateTime Tolerancia
        {
            get { return mTolerancia; }
            set { mTolerancia = value; }
        }

        public int Orden
        {
            get { return mOrden; }
            set { mOrden = value; }
        }

        public bool EsFranco
        {
            get
            {
                return mEsFranco;
            }
            set
            {
                mEsFranco = value;
            }
        }

        public bool EsSabado
        {
            get
            {
                return mEsSabado;
            }
            set
            {
                mEsSabado = value;
            }

        }

        public int DiasRotacion
        {
            get
            {
                return mDiasRotacion;
            }
            set
            {
                mDiasRotacion = value;
            }
        }
        /// <summary>
        /// Hora de salida del primer tramo cuando el turno es partido
        /// </summary>
        public DateTime HoraSalidaIntermedia
        {
            get { return _horaSalidaIntermedia; }
            set { _horaSalidaIntermedia = value; }
        }
        /// <summary>
        /// Hora de entrada del segundo tramo cuando el turno es partido
        /// </summary>
        public DateTime HoraEntradaIntermedia
        {
            get { return _horaEntradaIntermedia; }
            set { _horaEntradaIntermedia = value; }
        }
        public int MinutosDeAlmuerzo
        {
            get { return _minutosDeAlmuerzo; }
            set { _minutosDeAlmuerzo = value; }
        }
        #endregion

        #region Constructores
        public CAHorarioTurnoBD()
        {
            ValoresIniciales();
        }
        private void ValoresIniciales()
        {
            mIdHorarioTurno = -1;
            _horaEntradaIntermedia = DateTime.MinValue;
            _horaSalidaIntermedia = DateTime.MinValue;
            _minutosDeAlmuerzo = 0;
        }
        public CAHorarioTurnoBD(int pIdHorarioTurno)
        {
            ValoresIniciales();
            mIdHorarioTurno = pIdHorarioTurno;
            Editar();
        }
        #endregion

        #region Funciones
        protected override void AsignarSP()
        {
            SPInsertar = "CAHorarioTurnoInsertar";
            SPSeleccionar = "CAHorarioTurnoSeleccionar";
            SPActualizar = "CAHorarioTurnoActualizar";
            SPEditar = "CAHorarioTurnoEditar";
            SPRecuperar = "CAHorarioTurnoRecuperar";
            SPEliminar = "CAHorarioTurnoEliminar";
        }

        protected override System.Data.SqlClient.SqlParameter[] AsignaParametros(string pNombreSP)
        {
            SqlParameter[] Param;
            SqlParameter Parametro;
            switch (pNombreSP)
            {
                case "CAHorarioTurnoRecuperar":
                    Param = new SqlParameter[1];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@idTurno";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdTurno;
                    Param[0] = Parametro;

                    return Param;

                case "CAHorarioTurnoEliminar":
                    Param = new SqlParameter[1];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@idHorarioTurno";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdHorarioTurno;
                    Param[0] = Parametro;

                    return Param;

                case "CAHorarioTurnoEditar":
                    Param = new SqlParameter[1];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@idHorarioTurno";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdHorarioTurno;
                    Param[0] = Parametro;

                    return Param;

                case "CAHorarioTurnoInsertar":
                    Param = new SqlParameter[11];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@idTurno";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdTurno;
                    Param[0] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraEntrada";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraEntrada;
                    Param[1] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraSalida";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraSalida;
                    Param[2] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@Tolerancia";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = Tolerancia;
                    Param[3] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@Orden";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = Orden;
                    Param[4] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@EsFranco";
                    Parametro.SqlDbType = SqlDbType.Bit;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = EsFranco;
                    Param[5] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@EsSabado";
                    Parametro.SqlDbType = SqlDbType.Bit;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = EsSabado;
                    Param[6] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@DiasRotacion";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = DiasRotacion;
                    Param[7] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraSalidaIntermedia";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraSalidaIntermedia;
                    Param[8] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraEntradaIntermedia";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraEntradaIntermedia;
                    Param[9] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@MinutosDeAlmuerzo";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = MinutosDeAlmuerzo;
                    Param[10] = Parametro;

                    return Param;

                case "CAHorarioTurnoActualizar":
                    Param = new SqlParameter[12];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@idHorarioTurno";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdHorarioTurno;
                    Param[0] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@idTurno";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdTurno;
                    Param[1] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraEntrada";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraEntrada;
                    Param[2] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraSalida";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraSalida;
                    Param[3] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@Tolerancia";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = Tolerancia;
                    Param[4] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@Orden";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = Orden;
                    Param[5] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@EsFranco";
                    Parametro.SqlDbType = SqlDbType.Bit;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mEsFranco;
                    Param[6] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@EsSabado";
                    Parametro.SqlDbType = SqlDbType.Bit;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = EsSabado;
                    Param[7] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@DiasRotacion";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = DiasRotacion;
                    Param[8] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraSalidaIntermedia";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraSalidaIntermedia;
                    Param[9] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@HoraEntradaIntermedia";
                    Parametro.SqlDbType = SqlDbType.DateTime;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = HoraEntradaIntermedia;
                    Param[10] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@MinutosDeAlmuerzo";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = MinutosDeAlmuerzo;
                    Param[11] = Parametro;

                    return Param;

                default: return null;
            }
        }

        protected override void AsignarDatos(System.Data.SqlClient.SqlDataReader pDatos)
        {
            mIdTurno = pDatos.GetInt32(pDatos.GetOrdinal("idTurno"));
            try { mHoraEntrada = pDatos.GetDateTime(pDatos.GetOrdinal("HoraEntrada")); }
            catch { mHoraEntrada = DateTime.Parse("00:00:00"); }

            try { mHoraSalida = pDatos.GetDateTime(pDatos.GetOrdinal("HoraSalida")); }
            catch { mHoraSalida = DateTime.Parse("00:00:00"); }

            try { mTolerancia = pDatos.GetDateTime(pDatos.GetOrdinal("Tolerancia")); }
            catch { mTolerancia = DateTime.Parse("00:00:00"); }

            try { mOrden = pDatos.GetInt32(pDatos.GetOrdinal("Orden")); }
            catch { mOrden = -1; }

            if (pDatos.GetValue(pDatos.GetOrdinal("EsFranco")) != DBNull.Value)
                mEsFranco = pDatos.GetBoolean(pDatos.GetOrdinal("EsFranco"));
            if (pDatos.GetValue(pDatos.GetOrdinal("EsSabado")) != DBNull.Value)
                mEsSabado = pDatos.GetBoolean(pDatos.GetOrdinal("EsSabado"));

            try { mDiasRotacion = pDatos.GetInt32(pDatos.GetOrdinal("DiasRotacion")); }
            catch { mDiasRotacion = -1; }

            try { HoraEntradaIntermedia = pDatos.GetDateTime(pDatos.GetOrdinal("HoraEntradaIntermedia")); }
            catch { HoraEntradaIntermedia = DateTime.Parse("00:00:00"); }

            try { HoraSalidaIntermedia = pDatos.GetDateTime(pDatos.GetOrdinal("HoraSalidaIntermedia")); }
            catch { HoraSalidaIntermedia = DateTime.Parse("00:00:00"); }

            try { MinutosDeAlmuerzo = pDatos.GetInt32(pDatos.GetOrdinal("MinutosDeAlmuerzo")); }
            catch { mDiasRotacion = 0; }
        }
        #endregion
    }
}